package com.zyg.collector;

import com.zyg.pojo.User;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;


/**
 * 自定义收集器
 *
 */
public class MyCollector implements Collector<User, List<User>, List<User>> {


    /**
     * 生成收集器结果容器
     * @return
     */
    @Override
    public Supplier<List<User>> supplier() {
        return ArrayList::new;
    }

    /**
     * 计算消费元素，即归纳元素，将流中的元素一个个与结果容器发生操作
     * @return
     */
    @Override
    public BiConsumer<List<User>, User> accumulator() {
        return ((users, user) -> {
            if (user.getFemale()){
                users.add(user);
            }
        });
    }

    @Override
    public BinaryOperator<List<User>> combiner() {
        return null;
    }

    /**
     * 结果集类型转换操作
     * @return
     */
    @Override
    public Function<List<User>, List<User>> finisher() {
        return Function.identity();
    }

    /**
     * 当前收集器中的特征值
     * @return
     */
    @Override
    public Set<Characteristics> characteristics() {
        return EnumSet.of(Characteristics.IDENTITY_FINISH,Characteristics.IDENTITY_FINISH);
    }
}
